package com.xci.sys.dao;

import com.xci.sys.entity.SysDic;
import com.xci.sys.filter.DicFilter;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 字典数据层
 * @author 吕艳阳
 */
public interface DicDao {
    /**
     * 新建字典
     * @param entity 字典对象
     * @return 返回影响的行数
     */
    Integer insert(@Param("entity") SysDic entity);

    /**
     * 修改字典
     * @param entity 字典对象
     * @return 返回影响的行数
     */
    Integer update(@Param("entity") SysDic entity);

    /**
     * 修改字典状态
     * @param id 字典主键
     * @param status 字典状态
     * @return 返回影响的行数
     */
    Integer updateStatus(@Param("id") String id, @Param("status") Boolean status);

    /**
     * 更新字典类型编码
     * @param oldCode 原字典类型编码
     * @param newCode 新字典类型编码
     */
    Integer updateCode(@Param("oldCode") String oldCode, @Param("newCode") String newCode);

    /**
     * 根据主键更新排序路径
     * @param id 机构主键
     * @param path 排序路径
     * @return 返回影响的行数
     */
    Integer updatePath(@Param("id") String id, @Param("path") String path);

    /**
     * 根据主键更新父节点
     * @param id 机构主键
     * @param parentId 父节点
     * @return 返回影响的行数
     */
    Integer updateParentId(@Param("id") String id, @Param("parentId") String parentId);

    /**
     * 删除字典
     * @param id 字典主键
     * @return 返回影响的行数
     */
    Integer delete(@Param("id") String id);

    /**
     * 根据字典类型编码删除
     * @param code 字典类型编码
     * @return 返回影响的行数
     */
    Integer deleteByCode(@Param("code") String code);

    /**
     * 检查主键是否存在
     * @param id 主键
     * @return 如果存在返回true, 否则返回false
     */
    Boolean existById(@Param("id") String id);

    /**
     * 检查字典编码是否存在
     * @param code 字典类型编码
     * @return 如果存在返回true, 否则返回false
     */
    Boolean existByCode(@Param("code") String code);

    /**
     * 检查字典名称唯一性
     * @param code 字典类型编码
     * @param name 字典名称
     * @param id 字典主键
     * @return 如果存在返回true, 否则返回false
     */
    Boolean existByName(@Param("code") String code, @Param("name") String name, @Param("id") String id);

    /**
     * 查询单个字典
     * @param id 字典主键
     * @return 返回字典对象
     */
    SysDic selectById(@Param("id") String id);

    /**
     * 根据类型编码查询字典数量
     * @param code 字典类型编码
     */
    Long selectCountByCode(@Param("code") String code);

    /**
     * 查询字典列表
     * @param filter 字典过滤条件
     * @return 字典列表
     */
    List<SysDic> selectList(@Param("filter") DicFilter filter);
}